/**
 *
 * Eventos
 *
 **/

#ifndef _EVENTOS_H_
#define _EVENTOS_H_

#include <windows.h>

class Eventos;
class Janela;

typedef struct tagEventoCriar {
    HWND hwnd;
    LPVOID    lpCreateParams; 
    HINSTANCE hInstance; 
    HMENU     hMenu;
    HWND      hwndParent; 
    int       cy; 
    int       cx; 
    int       y; 
    int       x; 
    LONG      style; 
    LPCTSTR   lpszName; 
    LPCTSTR   lpszClass; 
    DWORD     dwExStyle; 
} EventoCriar;


typedef struct tagEventoDestruir {
    HWND hwnd;
} EventoDestruir;


typedef struct tagEventoMinimizar {
    HWND hwnd;
} EventoMinimizar;


typedef struct tagEventoMaximizar {
    HWND hwnd;
} EventoMaximizar;


typedef struct tagEventoRestaurar {
    HWND hwnd;
} EventoRestaurar;


typedef struct tagEventoFechar {
    HWND hwnd;
} EventoFechar;


typedef struct tagEventoBaixarEsq {
    Janela* janela;
    HWND hwnd;
    int x;
    int y;
} EventoBaixarEsq;


typedef struct tagEventoBaixarDir {
    Janela* janela;
    HWND hwnd;
    int x;
    int y;
} EventoBaixarDir;


typedef struct tagEventoSubirEsq {
    Janela* janela;
    HWND hwnd;
    int x;
    int y;
} EventoSubirEsq;


typedef struct tagEventoSubirDir {
    Janela* janela;
    HWND hwnd;
    int x;
    int y;
} EventoSubirDir;


typedef struct tagEventoMoverSobre {
    Janela* janela;
    HWND hwnd;
    int x;
    int y;
    int xAnte;
    int yAnte;
    int xGlobal;
    int yGlobal;
} EventoMoverSobre;


typedef struct tagEventoMoverFora {
    Janela* janela;
    HWND hwnd;
    int x;
    int y;
    int xAnte;
    int yAnte;
} EventoMoverFora;


typedef struct tagEventoMoverMouse {
    Janela* janela;
    HWND hwnd;
    int x;
    int y;
    int xAnte;
    int yAnte;
} EventoMoverMouse;


typedef struct tagEventoPintar {
    HDC hdc;
    HWND hwnd;
} EventoPintar;


typedef struct tagEventoTeclar {
    Janela* janela;
    HWND hwnd;
    char c;
} EventoTeclar;


typedef struct tagEventoFocar {
    Janela* janela;
    HWND hwnd;
} EventoFocar;

typedef struct tagEventoOfuscar {
    Janela* janela;
    HWND hwnd;
} EventoOfuscar;



class Eventos
{
      
public:

    virtual bool AoCriar(EventoCriar ev);
    virtual bool AoDestruir(EventoDestruir);

    virtual bool AoMinimizar(EventoMinimizar ev);
    virtual bool AoMaximizar(EventoMaximizar ev);
    virtual bool AoRestaurar(EventoRestaurar ev);
    virtual bool AoFechar(EventoFechar ev);

    virtual bool AoBaixarEsq(EventoBaixarEsq ev);
    virtual bool AoBaixarDir(EventoBaixarDir ev);
    virtual bool AoSubirEsq(EventoSubirEsq ev);
    virtual bool AoSubirDir(EventoSubirDir ev);
    virtual bool AoMoverSobre(EventoMoverSobre ev);
    virtual bool AoMoverFora(EventoMoverFora ev);
    //virtual bool AoMoverMouse(EventoMoverMouse ev);

    virtual bool AoFocar(EventoFocar ev);
    virtual bool AoOfuscar(EventoOfuscar ev);

    virtual bool AoPintar(EventoPintar ev);

    virtual bool AoTeclar(EventoTeclar ev);
    
    HWND m_hwnd;

};


#endif
